// 导入Redux Toolkit的核心功能
import { configureStore, combineReducers } from '@reduxjs/toolkit';
// 导入Redux Persist相关功能，用于状态持久化
import { persistReducer, persistStore, FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER } from 'redux-persist';
// 导入localStorage作为持久化存储引擎
import storage from 'redux-persist/lib/storage';

// 导入各个功能模块的slice
import doctorSlice from './doctorSlice';
import doctorDetailSlice from './doctorDetailSlice';
import userSlice from './userSlice';
import searchSlice from './searchSlice';

/**
 * 根Reducer - 组合所有功能模块的reducer
 * 
 * 功能模块说明：
 * - doctor: 医生相关状态管理（关注、评论、锦旗等）
 * - doctorDetail: 医生详情状态管理（当前查看的医生信息）
 * - user: 用户状态管理（登录、个人信息等）
 * - search: 搜索状态管理（搜索历史、结果等）
 */
const rootReducer = combineReducers({
  doctor: doctorSlice,
  doctorDetail: doctorDetailSlice,
  user: userSlice,
  search: searchSlice,
});

/**
 * Redux Persist配置
 * 
 * 配置说明：
 * - key: 持久化存储的键名
 * - storage: 使用localStorage作为存储引擎
 * - whitelist: 指定需要持久化的状态模块
 * - version: 状态版本号，用于迁移管理
 */
const persistConfig = {
  key: 'root', // 存储键名
  storage, // 存储引擎（localStorage）
  whitelist: ['doctor', 'doctorDetail', 'user', 'search'], // 需要持久化的模块
  version: 1, // 状态版本号
};

/**
 * 持久化的根Reducer
 * 将rootReducer包装为支持持久化的reducer
 */
const persistedReducer = persistReducer(persistConfig, rootReducer);

/**
 * Redux Store配置
 * 
 * 功能特性：
 * - 使用持久化的reducer
 * - 配置中间件，忽略Redux Persist的序列化检查
 * - 支持开发工具和调试
 */
export const store = configureStore({
  reducer: persistedReducer, // 使用持久化的reducer
  middleware: (getDefaultMiddleware) =>
    getDefaultMiddleware({
      serializableCheck: {
        // 忽略Redux Persist相关的action，避免序列化检查错误
        ignoredActions: [FLUSH, REHYDRATE, PAUSE, PERSIST, PURGE, REGISTER],
      },
    }),
});

/**
 * Redux Persist持久化器
 * 用于在应用启动时恢复持久化的状态
 */
export const persistor = persistStore(store);

/**
 * 根状态类型定义
 * 从store的getState方法推断出完整的应用状态类型
 */
export type RootState = ReturnType<typeof store.getState>;

/**
 * 应用Dispatch类型定义
 * 从store的dispatch方法推断出dispatch函数的类型
 */
export type AppDispatch = typeof store.dispatch; 